ContextCaptureユーザーガイド

IDによる参照

3MXBファイルには複数のリソースが含まれており、そのすべてを相互に照合できる必要があります。すでに説明したように、ノードとリソースを結び付けるために、リソースIDが使用されます。

1つめの対応は、ノードと幾何形状の間の対応です。ノードのデータに含まれるリソース配列には、ノードに属するすべての幾何形状リソースのIDが列挙されています。ヘッダーのリソース配列には、ファイル内の少なくとも1つのノードで必要なすべてのリソースが記述されています。ノードのリソースIDとヘッダーのリソースIDを照合することで、ノードの幾何形状を再構築することができます。

下の図で、ノード0には、リソース0とリソース1が幾何形状として対応します。リソース0のタイプが幾何形状ファイルであるのに対し、リソース1のタイプは幾何形状バッファであり、メッシュはバッファ0に記録されています。ノード1はリソース2の幾何形状で定義されます。これはバッファ1に含まれています。ヘッダー内のリソースの順序はバッファの順序と一致するので、バッファ1は自動的にリソース2に対応付けられます。

3MXBでのリソースの対応付け。緑はバイナリデータ、青は文字列データを表します。

幾何形状は1つのノードに属しますが、ノードに対応する幾何形状メッシュは、存在しない場合も、1個の場合も、複数の場合もあります。ノードが複数の幾何形状を持つ理由は2つあります。第1に、1つのノードがテクスチャ付きとテクスチャなしのデータを持つ場合や、複数の画像によるテクスチャ付きのデータを持つ場合があります。このような場合は、幾何形状を複数のバッファに分割し、1つのバッファで1つのテクスチャを定義するのが便利です。第2に、システムによっては、幾何形状バッファのサイズがMAX_USHORTの値に制限される場合があります。たとえば、WebGLビューア向けに生成される場合、幾何形状はMAX_USHORT(65,535)以下のサイズのバッファに分割されます。これはターゲットのビューアに応じて調整することができます。

2つめの対応は、幾何形状メッシュとそれに対応するテクスチャの間の対応です。この場合も、リソースIDが照合に使用されます。幾何形状メッシュは、1つのテクスチャを持つか、テクスチャを持たないかのどちらかです。テクスチャが必要な場合は、"texture"タグが幾何形状の記述に存在します。指定されたテクスチャIDは、ヘッダーのリソースコレクションに記述されているテクスチャリソースのIDの1つに一致する必要があります。

テクスチャは、異なるノードで、複数の幾何形状から使用することができます。上記の例では、リソース0とリソース2の両方が、リソースpの共通のテクスチャを使用しています。

JSON形式の完全なヘッダーの例を次に示します。

{ 
   "version":1,
   "nodes":[ 
      { 
         "id":"node0",
         "bbMin":[28.7803, -12.6859, 17.3977],
         "bbMax":[30.7065, -2.68368, 28.2069],
         "maxScreenDiameter":118.819,
         "children": [ "Tile_p000_p000_p001_L20_00.3mxb"],
         "resources":[ "geometry0"]
      }
   ],
   "resources":[ 
      { 
         "type":"textureBuffer",
         "format":"jpg",
         "id":"texture0",
         "size":1665
      },
      { 
         "type":"geometryBuffer",
         "format":"ctm",
         "id":"geometry0",
         "texture":"texture0",
         "bbMin":[28.7803, -12.6859, 17.3977],
         "bbMax":[30.7065, -2.68368, 28.2069],
         "size":1233
      }
   ]
}